package com.wyl.wyl.testapplication;

import android.app.Activity;
import android.app.Application;
import android.content.Context;
import android.support.multidex.MultiDex;

import com.iflytek.cloud.SpeechConstant;
import com.iflytek.cloud.SpeechUtility;
import com.inossem_library.tips.logcat.util.LogUtils;
import com.yanzhenjie.nohttp.InitializationConfig;
import com.yanzhenjie.nohttp.NoHttp;
import com.yanzhenjie.nohttp.URLConnectionNetworkExecutor;
import com.yanzhenjie.nohttp.cache.DBCacheStore;
import com.yanzhenjie.nohttp.cookie.DBCookieStore;
import com.yatoooon.screenadaptation.ScreenAdapterTools;

import java.util.Stack;

/**
 * Created by es on 2019/4/24.
 */

public class MyApplication extends Application{

    private static MyApplication mApplication; // application对象
    private static MyApplication context;

    private static Stack<Activity> stack; // activity对象栈
    private void initDensityHelper() {
        ScreenAdapterTools.init(this);
    }

    @Override
    public void onCreate() {
        super.onCreate();
        mApplication = this;
        context = this;
        SpeechUtility.createUtility(this, SpeechConstant.APPID +"=5d638925");
        initDensityHelper();
        //初始化NoHttp
        initNoHttp(mApplication);
        // 主要是添加下面这句代码
        MultiDex.install(this);
        LogUtils.initLogger();
    }
    // 获取单利形式activity栈对象
    private Stack<Activity> getStack() {
        if (stack == null) {
            stack = new Stack<Activity>();
        }
        return stack;
    }
    private void initNoHttp(Context context) {
        NoHttp.initialize(InitializationConfig.newBuilder(context)
                // 设置全局连接超时时间，单位毫秒，默认10s。
                .connectionTimeout(20 * 1000)
                // 设置全局服务器响应超时时间，单位毫秒，默认10s。
                .readTimeout(20 * 1000)
                // 配置缓存，默认保存数据库DBCacheStore，保存到SD卡使用DiskCacheStore。
                .cacheStore(
                        new DBCacheStore(this).setEnable(true) // 如果不使用缓存，设置setEnable(false)禁用。
                )
                // 配置Cookie，默认保存数据库DBCookieStore，开发者可以自己实现。
                .cookieStore(
                        new DBCookieStore(this).setEnable(true) // 如果不维护cookie，设置false禁用。
                )
                // 配置网络层，URLConnectionNetworkExecutor，如果想用OkHttp：OkHttpNetworkExecutor。
                .networkExecutor(new URLConnectionNetworkExecutor())
                .build()
        );
    }
    // 向栈中压入activity对象
    public boolean pushActivity(Activity activity) {
        return getStack().add(activity);
    }

    // 从栈中弹出activity对象
    public void popActivity(Activity activity) {
        if (getStack().indexOf(activity) != -1) {
            getStack().remove(getStack().indexOf(activity));
        }
    }

    public void popActivity() {
        Activity popActivity = getStack().pop();
        if (popActivity != null) {
            popActivity.finish();
        }
    }

    // 从栈中弹出activity对象，并调用该activity对象的finish方法关闭activity
    private boolean removeActivity(Activity activity) {
        boolean flag = false;
        if (getStack().indexOf(activity) != -1) {
            Activity removeActivity = getStack().remove(getStack().indexOf(activity));
            removeActivity.finish();
            flag = true;
        }
        return flag;
    }

    // 移除栈中所有的activity对象
    public boolean removeAllActivity() {
        for (int i = getStack().size() - 1; i >= 0; i--) {
            if (!removeActivity(getStack().get(i))) {
                return false;
            }
        }
        return true;
    }

    public void exitApp() {
        android.os.Process.killProcess(android.os.Process.myPid()); // 杀死进程
        System.exit(0);// 直接结束程序
    }

    // 获取EmpApplication对象
    public static synchronized MyApplication getInstance() {
        return mApplication;
    }

    /**
     * 获取Context
     */
    public static MyApplication getContext() {
        return context;
    }
}
